/**
 * Alipay.com Inc.
 * Copyright (c) 2004-2014 All Rights Reserved.
 */
package com.zb.util;

import com.ZLHW.base.Exception.BaseErrorModel;
import org.apache.commons.lang.ArrayUtils;
import org.springframework.util.CollectionUtils;

import java.util.Collection;

/**
 * 参数检查断言工具类，可以减少一些<code>if</code>代码逻辑<br>
 * 当断言不成立时，抛出指定错误代码的BaseErrorModel异常
 * 
 * @author pengwei
 * @version $Id: AssertUtil.java, v 0.1 2014年2月26日 下午2:41:15 pengwei Exp $
 */
public final class AssertUtil {

    /**
     * 禁用构造函数
     */
    private AssertUtil() {
        // 禁用构造函数
    }

    /**
     * 期待对象为非空，如果检查的对象为<code>null</code>，抛出异常<code>BaseErrorModel</code>
     * 
     * @param object
     * @param resutlCode
     * @throws BaseErrorModel
     */
    public static void isNotNull(Object object, String resutlCode) throws BaseErrorModel {
        if (object == null) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待对象为非空，如果检查的对象为<code>null</code>，抛出异常<code>BaseErrorModel</code>
     * @param object
     * @param resutlCode
     * @param message 异常说明
     * @throws BaseErrorModel
     */
    public static void isNotNull(Object object, String resutlCode, String message)
                                                                                      throws BaseErrorModel {
        if (object == null) {
            throw new BaseErrorModel(resutlCode, message);
        }
    }

    /**
     * 期待字符串为非空，如果检查字符串是空白：<code>null</code>、空字符串""或只有空白字符，抛出异常<code>BaseErrorModel</code>
     * 
     * @param text 待检查的字符串
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void isNotBlank(String text, String resutlCode) throws BaseErrorModel {
        if (org.apache.commons.lang.StringUtils.isBlank(text)) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待字符串为非空，如果检查字符串是空白：<code>null</code>、空字符串""或只有空白字符，抛出异常<code>BaseErrorModel</code>
     * 
     * @param text 待检查的字符串
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void isNotBlank(String text, String resutlCode, String errorMsg)
                                                                                      throws BaseErrorModel {
        if (StringUtils.isBlank(text)) {
            throw new BaseErrorModel(resutlCode, errorMsg);
        }
    }

    /**
     * 期待数字为0以上，如果坚持数字是0或者小于0，抛出异常<code>BaseErrorModel</code>
     * 
     * @param num 待坚持数字
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void isNotEqualOrLessThanZero(long num, String resutlCode)
                                                                                throws BaseErrorModel {
        if (0 == num || 0 > num) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期望num>=compare,否则抛异常
     * 
     * @param num
     * @param compare
     * @param resutlCode
     * @throws BaseErrorModel
     */
    public static void isNotLess(long num, long compare, String String)
                                                                                      throws BaseErrorModel {
        if (num < compare) {
            throw new BaseErrorModel(String);
        }
    }

    /**
     * 期待集合对象为非空，如果检查集合对象是否为null或者空数据，抛出异常<code>BaseErrorModel</code>
     * 
     * @param collection 集合对象
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void notEmpty(Collection<?> collection, String resutlCode)
                                                                                throws BaseErrorModel {
        if (CollectionUtils.isEmpty(collection)) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待数组对象为非空
     * 
     * @param array
     * @param resutlCode
     * @throws BaseErrorModel
     */
    public static void notEmpty(Object[] array, String resutlCode) throws BaseErrorModel {
        if (ArrayUtils.isEmpty(array)) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待的正确值为true，如果实际为false，抛出异常<code>BaseErrorModel</code>
     * 
     * @param expression 
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void isTrue(boolean expression, String resutlCode) throws BaseErrorModel {
        if (!expression) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待的正确值为false，如果实际为true，抛出异常<code>BaseErrorModel</code>
     * 
     * @param expression 
     * @param resutlCode 异常代码
     * @throws BaseErrorModel
     */
    public static void isFalse(boolean expression, String resutlCode) throws BaseErrorModel {
        if (expression) {
            throw new BaseErrorModel(resutlCode);
        }
    }

    /**
     * 期待的正确值为true，如果实际为false，抛出异常<code>BaseErrorModel</code>
     * 
     * @param expression 表达式
     * @param resutlCode 错误代码
     * @param message 异常说明
     * @throws BaseErrorModel
     */
    public static void isTrue(boolean expression, String resutlCode, String message)
                                                                                        throws BaseErrorModel {
        if (!expression) {
            throw new BaseErrorModel(resutlCode, message);
        }
    }

    /**
     * 期待的正确值为false，如果实际为true，抛出异常<code>BaseErrorModel</code>
     * 
     * @param expression 表达式
     * @param resutlCode 错误代码
     * @param message 异常说明
     * @throws BaseErrorModel
     */
    public static void isFalse(boolean expression, String resutlCode, String message)
                                                                                         throws BaseErrorModel {
        if (expression) {
            throw new BaseErrorModel(resutlCode, message);
        }
    }

    /**
     * 期待对象为空，如果检查的对象不为<code>null</code>，抛出异常<code>BaseErrorModel</code>
     * 
     * @param object
     * @param resutlCode
     * @throws BaseErrorModel
     */
    public static void isNull(Object object, String resutlCode) throws BaseErrorModel {
        if (object != null) {
            throw new BaseErrorModel(resutlCode);
        }
    }
}
